import re
from collections import defaultdict
import statistics


def process_log_files(file_paths):
    tid_data = defaultdict(dict)

    for file_path in file_paths:
        with open(file_path, 'r', encoding='utf-8') as file:
            for line in file:
                match = re.search(
                    r'(\d+:\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+) \| INFO  \| TID:(\d+) \| .* \| (.*?) \| (.*?): (\d+) 毫秒',
                    line)
                if match:
                    _, tid, _, description, time = match.groups()
                    tid_data[tid][description] = int(time)

    return tid_data


def calculate_total_time(data):
    return data.get('语音转文本接口响应时间', 0) + data.get('大模型对练响应总时长时间', 0)


def format_output(tid_data):
    all_total_times = []

    for tid, data in tid_data.items():
        print(f"Processing TID: {tid}")

        if '语音转文本接口响应时间' in data:
            print(f"1. 语音转文本接口响应时间: {data['语音转文本接口响应时间']} 毫秒")

        if '大模型对练响应总时长时间' in data:
            print(f"2. 大模型对练响应总时长时间: {data['大模型对练响应总时长时间']} 毫秒")

            if '模型对练接口响应时间' in data:
                print(f"2.1 模型对练接口响应时间: {data['模型对练接口响应时间']} 毫秒")

            if '文本转语音接口响应时间' in data:
                print(f"2.2 文本转语音接口响应时间: {data['文本转语音接口响应时间']} 毫秒")

        total_time = calculate_total_time(data)
        print(f"总时间: {total_time} 毫秒")
        all_total_times.append(total_time)

        print()  # Add a blank line between different TIDs

    if all_total_times:
        print("统计信息:")
        print(f"总次数: {len(all_total_times)}")
        print(f"平均值: {statistics.mean(all_total_times):.2f} 毫秒")
        print(f"最高值: {max(all_total_times)} 毫秒")
        print(f"中位数: {statistics.median(all_total_times)} 毫秒")


# 使用示例
file_paths = ['log1.txt', 'log2.txt', 'log3.txt', 'log4.txt']  # 替换为实际的文件路径
tid_data = process_log_files(file_paths)
format_output(tid_data)